「快點簽名啦。」
今天要來介紹數位簽章。
首先澄清一點,數位簽章是以數學運算的方式進行的簽章,「簽章」只是模擬簽章的行為與功能的詞。
我們刷卡消費時在電子版上簽的那個東西並不叫數位簽章。
數位簽章是靠公鑰密碼學來實現的,我們之前講過他的原理,
用私鑰加密,用公鑰解密。
而我們要做到的就是可以讓人確認資訊來源、確認是否被修改。
而另一方面,數位簽章的簽署人無法否認所為,因為只有他可以簽出這樣的數位簽章。
那麼今天就來實際說一下怎麼操作。
RSA的數位簽章非常簡單,就是直接將RSA的算法顛倒過來,用私鑰加密用公鑰解密。
這裡就不再贅述。
這裡指的DSA是數位簽章演算法,
不是 Driving Safety Alerting 也不是 Democratic Socialists of America,
我室友修的資料結構與演算法那也叫 DSA。
我要講的是一種數位簽章的演算法。
選定一個1024位元的質數 p
找一個160位元的 q 整除 ( p-1 )
尋找一個整數 使得
方法是尋找
這裡會用到費馬小定理跟循環群的概念
再選擇一個 d 介於0跟q之間。
計算
經過上面的運算就建立好了密鑰,
其中公鑰是(p, q, , ),私鑰是 d。
這裡的SHA( ) 就是雜湊函數,我們簽章的對象是訊息的雜湊值,這樣可避免過長的結果。
於是簽章的結果就是( r, s ),總共有320位元。
計算
如過運算結果 v 跟 r 相同,那就確認是本人所簽署。
今天先介紹DSA演算法,算法相較於之前都較複雜一些,
有興趣的讀者可以試著證明 DSA 的正確性。
明天我們將來看看由bitcoin所使用的數位簽章方法,ECDSA,橢圓曲線數位簽章。
圖片來源:
https://twitter.com/maj33dullah/status/1401605392195522566
https://memegenerator.net/instance/58480943/correction-guy-stop-look-at-my-beautiful-e-signature